home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Net Power 1996 November
/
The Net Power 1996-11.iso
/
mac
/
htmled
/
ActiveX
/
SAMPLES
/
SOLITAIR
/
SOL.ALX
< prev
next >
Wrap
Text File
|
1996-09-08
|
94KB
|
2,686 lines
<SCRIPT LANGUAGE="VBScript">
<!--
'The naming conventions for each of the areas where
' cards can play are:
'
' Shuffle Stack Place where cards are ALL face down
' and the user can click to put cards into
' play. Both 3 card and 1 card deal are supported.
' (to change number of cards played
' change the value of gCOUNTDEAL)
' There is only 1 Shuffle Stack.
'
' Discard Stack Place where cards are face up
' and can be dragged to an Ace Stack
' or a Card Stack. There is only 1 Discard Stack.
'
' Ace Stack Place where cards of the same suit
' are piled, starting with the Ace and Ending
' with the King. When all kings are showing
' the game is over and the animation begins.
' There are 4 Ace Stacks.
'
' Card Stack Place where cards are piled, alternating the
' the suit and in descending order.
' There are 7 card stacks.
'The following global variables are used for this application.
'Before each variable is information explaining how to use it,
'as well as explanatory text on the question that the variable
'answers (Boolean) or a statement describing the variable's use.
'
'The variable naming conventions used in this
' application are represented by: [g][r]vartypeVarName
' Where:
' [g] Denotes it as a global variable.
' [r] Denotes it as an array (region).
' vartype One of the values specified below.
' VarName Name of variable, starting each word
' with a capital letter.
' Using a VARNAME in ALL uppercase
' will denote it as a constant value.
'
' vartype can be:
' d Decimal number, numeric and non-integer.
' b Boolean.
' int Integer.
' inc Incrementer (Used when doing things, like animations
' in steps or increments).
' str String.
' obj Object or Control.
'
' NOTE: Since all data types in VBScript are Variants,
' this variable convention is for documentation and
' to help you with debugging and programming.
'
'Are we in debug mode?
dim gbDebug
'Did the mouseup event happen so
' we can stop dragging a card?
dim gbMouseUp
'Number of MouseMove(s) to skip before actually
' redrawing a card (makes the drag seem faster).
dim gintDragSkip
'Did the user want to End the game?
dim gbEndGame
'Done with bouncing all cards off screen.
dim gbAnimationDone
'Was the background clicked during card animation?
dim gbLeaveEarly
'Number of moves the card will take to get to the ace
' Stack during animation
dim gincCardMoveSteps
'Current card being moved.
dim gobjCurMoveCard
'Amount to move left of card on each step.
dim gincEndLeft
'Amount to move top of card on each step.
dim gincEndTop
'Order the suits appear on the Ace Stacks.
dim gstrSuitOrder
'Stack the cards are currently being moved to
dim gintCurStackToMove
'Done moving cards to Ace Stack.
dim gbCardMoveDone
'Is the shuffling done yet?
dim gbShuffleDone
'The array to hold the randomly shuffled cards.
dim grintShuffled(52)
'Number of times to go into the random sequence.
dim gRNDCOUNT
'For the End game
'Each card that is currently bouncing and the
' top and left value for each.
dim grCardBouncing(4,3)
'Which cards are done moving.
dim gbDoneMoving(4)
'Friction and gravity valued applied to each bounce.
dim gdFriction
dim gdGravity
'Used for the count of cards to deal.
dim gCOUNTDEAL
'Number of cards moved to Discard Stack when a user clicks the
' Shuffle Stack. Needed to determine how many cards should
' be showing on the Discard Stack.
dim gintCountDiscarded
'Stack the card is being moved from.
dim gintSrcStack
'Used during animation. These variables
' store the starting position of each card and
' the End points of where the card
' should End up after being moved.
dim gdStartTop, gdStartLeft
dim gdCardTop, gdCardLeft
dim gdOffsetTop
'Card being moved.
dim gintMoveCardInx
'Number of total cards being moved during a mouse
' drag, i.e., moving cards from one stack to another.
dim gintCountMoving
'Holds all the cards of the deck.
dim grobjAllCards(52)
'Is the card face up?
dim grbCardShowing(52)
'Current deck being displayed.
dim gintCurDeck
'Current deck being displayed in the dialog.
dim gintTempCurDeck
'Holds all the card backs to be displayed later.
dim grobjCardDeck(12)
'Used when comparing with a King or Ace.
dim gACE
dim gKING
'Starting index into stack array of Shuffle Stack.
dim gintShuffleStackInx
'Starting index into stack array of Discard Stack.
dim gintDiscardStackInx
'Starting index into stack array of first Ace Stack
dim gintAceStackStartInx
'This encompasses all 7 Card Stacks, 4 Ace Stacks,
' Shuffle Stack and Discard Stack.
'This array contains 30 items in each stack because 28 is
' the maximum number of cards that could be in one stack
' plus two spaces for other info.
' The first dimension of the array determines which
' stack to use and the second dimension is what is on
' the stack. The first element in each stack is the
' stack object, the second element is the count of
' elements and the third element onward is where the cards are stored.
dim grobjAllCardStacks(13,30)
'Value of the bottom of the stack, empty stack.
dim gstrBOTTOMOFSTACK
'Count of the total number of stacks used.
dim gintCountAllStacks
'Total number of card stacks (7).
dim gintCountCardStacks
'Number of pixels used between each card when
' being drawn.
dim gintCardOffset
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'**********************************************
'* Name: DebugPrint
'**********************************************
'* Description:
'* Provides a utility Function that displays
'* the string sent to it in a debug
'* "window." Currently, a listbox control
'* is used to display debug output.
'* Feel free to call this Function during
'* debugging.
'* NOTE: Does depEnd on the existence of a
'* listbox with the ID of lstDebugPrint
'**********************************************
'* Parameters:
'* str String displayed to debug window
'**********************************************
Sub DebugPrint(str)
If gbDebug then
lstDebugPrint.additem str
END IF
End Sub 'DebugPrint
'**********************************************
'* Name: OnLoad event for ActiveX Layout
'**********************************************
'* Description:
'* Sets up the default values and
'* calls startgame to get things going.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub Form_OnLoad()
'Turn debug mode off
gbDebug = false
'Allow the user a checkbox for changing debug mode
chkDebug.value = gbDebug
Form.DrawBuffer = "256000"
gACE = 1
gKING = 13
gCOUNTDEAL = 3
gdFriction = 2
gdGravity = 9.8
gstrBOTTOMOFSTACK = "BOS"
'Spacing when drawing a card
gintCardOffset = 11
gintShuffleStackInx = 12
gintDiscardStackInx = 13
gintCountCardStacks = 7
gintAceStackStartInx = gintCountCardStacks+1
gintCountAllStacks = 13
StartGame
End Sub 'Form_OnLoad
'**********************************************
'* Name: StartGame
'**********************************************
'* Description:
'* Gets the game going by setting up
'* the card back and shuffling and dealing
'* the cards.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub StartGame
gbEndGame = False
'Values used during animation
gintDragSkip = 3
gbCardMoveDone = True
tmEndAnimation.enabled = false
tmEndCardMove.enabled = false
gincCardMoveSteps = 0
gincEndLeft = 0
gincEndTop = 0
gintCountMoving = 0
LoadCards
if gintCurDeck > -1 or gintCurDeck < -12 then
ChangeTheDeck -1
end if
gRNDCOUNT = 500
DealCards
End Sub 'StartGame
'**********************************************
'* Name: LoadCard
'**********************************************
'* Description:
'* Loads all the arrays with the card objects.
'* Initializes grbCardShowing.
'* Applies default values to the stacks.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub LoadCards
'Could also use a control array here but this
' code loads the card objects into the array
set grobjAllCards(1) = Card1H
set grobjAllCards(2) = Card2H
set grobjAllCards(3) = Card3H
set grobjAllCards(4) = Card4H
set grobjAllCards(5) = Card5H
set grobjAllCards(6) = Card6H
set grobjAllCards(7) = Card7H
set grobjAllCards(8) = Card8H
set grobjAllCards(9) = Card9H
set grobjAllCards(10) = Card10H
set grobjAllCards(11) = Card11H
set grobjAllCards(12) = Card12H
set grobjAllCards(13) = Card13H
set grobjAllCards(14) = Card1D
set grobjAllCards(15) = Card2D
set grobjAllCards(16) = Card3D
set grobjAllCards(17) = Card4D
set grobjAllCards(18) = Card5D
set grobjAllCards(19) = Card6D
set grobjAllCards(20) = Card7D
set grobjAllCards(21) = Card8D
set grobjAllCards(22) = Card9D
set grobjAllCards(23) = Card10D
set grobjAllCards(24) = Card11D
set grobjAllCards(25) = Card12D
set grobjAllCards(26) = Card13D
set grobjAllCards(27) = Card1C
set grobjAllCards(28) = Card2C
set grobjAllCards(29) = Card3C
set grobjAllCards(30) = Card4C
set grobjAllCards(31) = Card5C
set grobjAllCards(32) = Card6C
set grobjAllCards(33) = Card7C
set grobjAllCards(34) = Card8C
set grobjAllCards(35) = Card9C
set grobjAllCards(36) = Card10C
set grobjAllCards(37) = Card11C
set grobjAllCards(38) = Card12C
set grobjAllCards(39) = Card13C
set grobjAllCards(40) = Card1S
set grobjAllCards(41) = Card2S
set grobjAllCards(42) = Card3S
set grobjAllCards(43) = Card4S
set grobjAllCards(44) = Card5S
set grobjAllCards(45) = Card6S
set grobjAllCards(46) = Card7S
set grobjAllCards(47) = Card8S
set grobjAllCards(48) = Card9S
set grobjAllCards(49) = Card10S
set grobjAllCards(50) = Card11S
set grobjAllCards(51) = Card12S
set grobjAllCards(52) = Card13S
'Make all cards transparent
ClearAllCards
'Load up the card stacks
set grobjAllCardStacks(gintShuffleStackInx,1)= Shuffle
set grobjAllCardStacks(gintDiscardStackInx,1)= Discard
set grobjAllCardStacks(1,1) = Stack1
set grobjAllCardStacks(2,1) = Stack2
set grobjAllCardStacks(3,1) = Stack3
set grobjAllCardStacks(4,1) = Stack4
set grobjAllCardStacks(5,1) = Stack5
set grobjAllCardStacks(6,1) = Stack6
set grobjAllCardStacks(7,1) = Stack7
for inx = 1 to gintCountAllStacks
grobjAllCardStacks(inx,2) = 0
next
set grobjAllCardStacks(gintAceStackStartInx,1) = Ace1
set grobjAllCardStacks(gintAceStackStartInx+1,1) = Ace2
set grobjAllCardStacks(gintAceStackStartInx+2,1) = Ace3
set grobjAllCardStacks(gintAceStackStartInx+3,1) = Ace4
'Setup initial stack size by setting to the size of a card object.
' Don't use default Discard Stack because is hardcoded.
for inx = 1 to gintCountAllStacks - 1
grobjAllCardStacks(inx,1).height = grobjAllCards(1).height
grobjAllCardStacks(inx,1).width = grobjAllCards(1).width
next
set grobjCardDeck(1) = CardDeck1
set grobjCardDeck(2) = CardDeck2
set grobjCardDeck(3) = CardDeck3
set grobjCardDeck(4) = CardDeck4
set grobjCardDeck(5) = CardDeck5
set grobjCardDeck(6) = CardDeck6
set grobjCardDeck(7) = CardDeck7
set grobjCardDeck(8) = CardDeck8
set grobjCardDeck(9) = CardDeck9
set grobjCardDeck(10) = CardDeck10
set grobjCardDeck(11) = CardDeck11
set grobjCardDeck(12) = CardDeck12
End Sub 'LoadCard
'**********************************************
'* Name: ChangeTheDeck
'**********************************************
'* Description:
'* Changes the current deck being used.
'**********************************************
'* Parameters:
'* DeckID New card deck to be displayed.
'* Current value of deck is stored
'* in gintCurDeck.
'**********************************************
Sub ChangeTheDeck (DeckID)
'The deck back didn't change so don't redo it.
If gintCurDeck = DeckID then
exit Sub
End If
'Deck is new, let's change all the cards that need it.
gintCurDeck = DeckID
for StackInx = 1 to gintCountAllStacks
for inner = 1 to intCountOnStack(StackInx)
strCard = strGetStackElement(StackInx,inner)
intCardInx = intGetCardIndex(strCard)
If not grbCardShowing(intCardInx) then
'Redraw the cards that are not face up.
DrawCard intCardInx
End If
next
next
End Sub 'ChangeTheDeck
'**********************************************
'* Name: ClearAllCards
'**********************************************
'* Description:
'* Sets all card objects to their transparent
'* value.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub ClearAllCards
for inx = 1 to 52
grobjAllCards(inx).Suite = 0
grobjAllCards(inx).Visible = True
next
End Sub 'ClearAllCards
'**********************************************
'* Name: Push
'**********************************************
'* Description:
'* Pushes (adds) a card object to a stack.
'**********************************************
'* Parameters:
'* intStack Stack to add card to
'* strCard Card to add
'**********************************************
Sub Push(intStack, strCard)
dim intNewSize
If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height + intGetVertOffset(intStack)
' grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width + intGetHorzOffset(intStack)
End If
intNewSize = grobjAllCardStacks(intStack,2)+1
grobjAllCardStacks(intStack,2) = intNewSize
grobjAllCardStacks(intStack,intNewSize+2) = strCard
'This makes all cards but the top two invisible so drawing of the stack
' is much faster
if intNewSize > 2 and _
(intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,intNewSize+2-2))
grobjAllCards(CardIndex).visible = false
end if
End Sub 'Push
'**********************************************
'* Name: strPop
'**********************************************
'* Description:
'* Returns the string representation of
'* the card at the top of the stack and
'* removes it from the top.
'**********************************************
'* Parameters:
'* intStack Stack to strPop card off of
'**********************************************
Function strPop(intStack)
strCard = strTopOfStack(intStack)
If gstrBOTTOMOFSTACK = strCard then
strPop = gstrBOTTOMOFSTACK
exit Function
End If
pos = grobjAllCardStacks(intStack,2)
'This unhides the cards that were hidden in Sub Push
if pos > 2 and _
(intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,pos+2-2))
grobjAllCards(CardIndex).visible = true
end if
strPop = grobjAllCardStacks(intStack,pos+2)
grobjAllCardStacks(intStack,2) = pos-1
grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height - intGetVertOffset(intStack)
' grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width - intGetHorzOffset(intStack)
End Function 'Pop
'**********************************************
'* Name: strGetStackElement
'**********************************************
'* Description:
'* Internal Stack function used to get
'* elements that are not on the top or the
'* bottom of the stack.
'**********************************************
'* Parameters:
'* intStack Stack to get it from
'* intElement Position of element
'**********************************************
Function strGetStackElement(intStack,intElement)
strGetStackElement = gstrBOTTOMOFSTACK
If Element <= intCountOnStack(intStack) then
strGetStackElement = grobjAllCardStacks(intStack,intElement+2)
End If
End Function 'strGetStackElement
'**********************************************
'* Name: strTopOfStack
'**********************************************
'* Description:
'* Returns the string value of the card
'* on the top of the stack. Does NOT
'* remove the card from the stack.
'**********************************************
'* Parameters:
'* intStack Stack to get card from
'**********************************************
Function strTopOfStack(intStack)
strTopOfStack = gstrBOTTOMOFSTACK
If 0 < intCountOnStack(intStack) then
Pos = intCountOnStack(intStack)
strTopOfStack = grobjAllCardStacks(intStack,Pos+2)
End If
End Function 'strTopOfStack
'**********************************************
'* Name: strGenerateCard
'**********************************************
'* Description:
'* Generates a card randomly. If the deck has
'* not been shuffled yet, they will be.
'**********************************************
'* Parameters:
'* intCardCount Card to get
'**********************************************
Function strGenerateCard(intCardCount)
dim rSorted(52)
'Shuffle the stack if not already done.
If not gbShuffleDone then
Randomize
'Go a random number of elements into the sequence.
for inx = 1 to (gRNDCOUNT * rnd())
next
'Load the unsorted array.
for inx = 1 to 52
rSorted(inx-1) = inx
next
'Load a shuffled card into the array.
for inx = 0 to 51
random = cint(rnd() * (51 - inx))
grintShuffled(inx+1) = rSorted(random)
rSorted(random) = rSorted(51 - inx)
next
gbShuffleDone = true
End If
intCardNum = grintShuffled(intCardCount)
strGenerateCard = strInxToCard(intCardNum)
End Function 'strGenerateCard
'**********************************************
'* Name: strInxToCard
'**********************************************
'* Description:
'* Converts a card number (index) to its
'* string representation.
'**********************************************
'* Parameters:
'* intCardNum Value of card
'**********************************************
Function strInxToCard(intCardNum)
inxSuit = 0
intCurCardNum = intCardNum
while 13 < intCurCardNum
intCurCardNum = intCurCardNum - 13
inxSuit = inxSuit + 1
wEnd
Select Case inxSuit
'Clubs, Spades, Hearts and Diamonds is the current order
' of Suits.
'Order in Card.ocx is dependent on suit order.
case 0
strSuit = "C"
case 1
strSuit = "S"
case 2
strSuit = "H"
case 3
strSuit = "D"
case Else
debugPrint "Error (strInxToCard): attempting to increment suit past last one"
End select
strCurCard = intCurCardNum & strSuit
strInxToCard = strCurCard
End Function 'strInxToCard
'**********************************************
'* Name: strGetCardSuit
'**********************************************
'* Description:
'* Returns the suit of a card.
'**********************************************
'* Parameters:
'* strCard Card to get the suit of.
'**********************************************
Function strGetCardSuit(strCard)
strGetCardSuit = ""
If "" = strCard then
exit Function
End If
strGetCardSuit = right(strCard,1)
End Function 'strGetCardSuit
'**********************************************
'* Name: intGetCardIndex
'**********************************************
'* Description:
'* Returns the position, (index) into the
'* AllCards array of where the card is.
'**********************************************
'* Parameters:
'* strCard Card to find index of.
'**********************************************
Function intGetCardIndex(strCard)
If "" = strCard or gstrBOTTOMOFSTACK = strCard then
intGetCardIndex = -1
exit Function
End If
strSuit = right(strCard,1)
'Order in Card.ocx is dependent on suit order.
Select case strSuit
case "H"
Offset = 26
case "D"
Offset = 39
case "S"
Offset = 13
case "C"
Offset = 0
End Select
intGetCardIndex = Offset + intCardVal(strCard)
End Function 'intGetCardIndex
'**********************************************
'* Name: intCardVal
'**********************************************
'* Description:
'* Returns the numeric value of a given card,
'* independent of suit.
'* Ex: 10 of Hearts is "10H" and the value
'* returned would be 10.
'**********************************************
'* Parameters:
'* strCard Card to get value of.
'**********************************************
Function intCardVal(strCard)
dim tmpVal
If "" = strCard or gstrBOTTOMOFSTACK = strCard then
tmpVal = -1
Else
tmpVal = left(strCard,len(strCard) -1)
End If
intCardVal = cint(tmpVal)
End Function 'intCardVal
'**********************************************
'* Name: bSameSuit
'**********************************************
'* Description:
'* Returns:
'* True if cards are the same suit.
'* False if suits are different.
'**********************************************
'* Parameters:
'* strCard1 First card.
'* strCard2 Card to compare against first card.
'**********************************************
Function bSameSuit(strCard1,strCard2)
'Get the values of both cards.
strSuit1 = strGetCardSuit(strCard1)
strSuit2 = strGetCardSuit(strCard2)
bSameSuit = (strSuit1 = strSuit2)
End Function 'bSameSuit
'**********************************************
'* Name: bSameColor
'**********************************************
'* Description:
'* Returns:
'* True if cards are the same color.
'* False if cards are different color.
'**********************************************
'* Parameters:
'* strCard1 First card.
'* strCard2 Card to compare against first card.
'**********************************************
Function bSameColor(strCard1,strCard2)
strSuit1 = strGetCardSuit(strCard1)
strSuit2 = strGetCardSuit(strCard2)
'Are they the same suit?
If (strSuit1 = strSuit2) then
bSameColor = True
exit Function
End If
'Since both cards don't match suit
' check the other suit of that color.
Select Case strSuit1
case "H"
bSameColor = (strSuit2 = "D")
case "D"
bSameColor = (strSuit2 = "H")
case "S"
bSameColor = (strSuit2 = "C")
case "C"
bSameColor = (strSuit2 = "S")
End select
End Function 'bSameColor
'**********************************************
'* Name: intGetHorzOffset
'**********************************************
'* Description:
'* Returns the current horizontal offset
'* in pixels when drawing the cards on a stack.
'**********************************************
'* Parameters:
'* intStack Stack to draw.
'**********************************************
Function intGetHorzOffset(intStack)
intGetHorzOffset = 0
'Only the Discard Stack has a horizontal offset.
If (gintDiscardStackInx = intStack) then
intGetHorzOffset = gintCardOffset
End If
End Function 'intGetHorzOffset
'**********************************************
'* Name: intGetVertOffset
'**********************************************
'* Description:
'* Returns the vertical offset, used during
'* drawing a stack, for a particular stack.
'**********************************************
'* Parameters:
'* intStack Stack to return Vertical
'* offset for.
'**********************************************
Function intGetVertOffset(intStack)
intGetVertOffset = gintCardOffset
'HARDCODE ASSUMPTION: ALL Stacks above gintAceStackStartInx WILL have a vert offset of 0
If (gintAceStackStartInx <= intStack) then
intGetVertOffset = 0
End If
End Function 'intGetVertOffset
'**********************************************
'* Name: DrawDiscardStack
'**********************************************
'* Description:
'* The Discard Stack is drawn in this routine
'* because it is a special case of the draw
'* routine. The difference being that all
'* other stacks draw ALL cards with an offset
'* and the discard ONLY draws the cards on
'* the top of its pile with an offset.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub DrawDiscardStack
dim intStartOffset
dim intStackSize
dim intCountPiles
dim intRemainder
'Default Offset Values
intHorzOffset = intGetHorzOffset(gintDiscardStackInx)
intVertOffset = intGetVertOffset(gintDiscardStackInx)
intStackSize = intCountOnStack(gintDiscardStackInx)
'See if less than three cards were transferred to Discard Stack.
intStartOffset = (intStackSize - gintCountDiscarded)
'Draw all underneath cards that won't have an offset.
for inx = 0 to intStartOffset - 1
strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
CardIndex = intGetCardIndex(strCard)
grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top
grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left
DrawCard CardIndex
next
OffsetInx = 0
'Draw the cards at the top of the Discard Stack.
for inx = intStartOffset to intStackSize - 1
strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
CardIndex = intGetCardIndex(strCard)
grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top + (OffsetInx * intVertOffset)
grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left + (OffsetInx * intHorzOffset)
DrawCard CardIndex
OffsetInx = OffsetInx + 1
'Bring that card to top of pile.
grobjAllCards(CardIndex).ZOrder(0)
next
'Make sure to bring hotspot stack to top of z order so it can get events.
grobjAllCardStacks(gintDiscardStackInx,1).ZOrder(0)
End Sub 'DrawDiscardStack
'**********************************************
'* Name: DrawCard
'**********************************************
'* Description:
'* Here we draw a card based on the index
'* sent in.
'* NOTE: if Card.ocx changes it will most likely
'* effect code here.
'**********************************************
'* Parameters:
'* intCardIndex Index into card array of
'* card being drawn.
'**********************************************
Sub DrawCard (CardIndex)
If True = grbCardShowing(CardIndex) then
'Calculate which suit it was so we
' can change it back.
inxSuit = (CardIndex \ 13)
inxCard = CardIndex - (inxSuit*13)
If (0 <> inxCard) then
inxSuit = inxSuit + 1
Else
inxCard = 13
End If
grobjAllCards(CardIndex).Number= inxCard
Else
'Cards are face down, let's use the current deck.
inxSuit = gintCurDeck
End If
grobjAllCards(CardIndex).Suite= inxSuit
End Sub 'DrawCard
'**********************************************
'* Name: DrawStack
'**********************************************
'* Description:
'* Draws a specific stack by getting the correct
'* offset and then calling DrawCard.
'**********************************************
'* Parameters:
'* intStack Stack to draw.
'**********************************************
Sub DrawStack (intStack)
'Default Offset Values
intHorzOffset = intGetHorzOffset(intStack)
intVertOffset = intGetVertOffset(intStack)
If 0 = intCountOnStack(intStack) then Exit Sub
If (gintDiscardStackInx = intStack) then
DrawDiscardStack
exit Sub
End If
for inx = 1 to intCountOnStack(intStack)
'This cycles through all the cards in the stack applying an offset.
strCard = grobjAllCardStacks(intStack,inx + 2)
intCardIndex = intGetCardIndex(strCard)
grobjAllCards(intCardIndex).top = grobjAllCardStacks(intStack,1).top + ((inx-1) * intVertOffset)
grobjAllCards(intCardIndex).left = grobjAllCardStacks(intStack,1).left + ((inx-1) * intHorzOffset)
DrawCard intCardIndex
next
If (0 < intCardIndex) then
grobjAllCards(intCardIndex).ZOrder(0)
grobjAllCardStacks(intStack,1).ZOrder(0)
End If
End Sub 'DrawStack
'**********************************************
'* Name: DealCards
'**********************************************
'* Description:
'* Here we deal the cards to each of the
'* 7 card stacks and put the rest into
'* the Shuffle Stack.
'**********************************************
'* Parameters:
'* NONE
'**********************************************
Sub DealCards
'The first time calling GenerateCard we have
' to be sure it shuffles the deck.
gbShuffleDone = false
intCardCount = 1
'This set of loops will deal the cards
' needed to the 7 stacks.
for inxStack = 1 to gintCountCardStacks
For inx = 1 to inxStack
strCard = strGenerateCard(intCardCount)
'Push on the new card.
Push inxStack,strCard
intCardInx = intGetCardIndex(strCard)
grbCardShowing(intCardInx) = False
intCardCount = intCardCount +1
grobjAllCards(intCardInx).Zorder(0)
next
'Only show the top card on the stack.
grbCardShowing(intCardInx) = True
DrawStack inxStack
next
'Give the rest to the Shuffle Stack.
for Card = intCardCount to 52
strCard = strGenerateCard(Card)
push gintShuffleStackInx, strCard
intCardInx = intGetCardIndex(strCard)
grbCardShowing(intCardInx) = false
grobjAllCards(intCardInx).Zorder(0)
next
DrawStack gintShuffleStackInx
End Sub 'DealCards
'**********************************************
'* Name: DoDblClick
'**********************************************
'* Description:
'* Here is where all double-clicking of
'* a card is processed. The double-click
'* allows a card to be put on an Ace Stack,
'* if the move is valid, with the
'* top card on the stack clicked.
'**********************************************
'* Parameters:
'* intStack The stack that was double-clicked.
'**********************************************
Sub DoDblClick(intStack)
'If Valid Move then move it.
intAceInx = gintAceStackStartInx
bMoved = false
strCard = strTopOfStack(intStack)
If (gstrBOTTOMOFSTACK = strCard) then Exit Sub
'Until we find a valid move or run out of Ace Stacks to check.
While intAceInx < gintAceStackStartInx + 4 and not bMoved
bMoved = bIsLegalMove(intStack,intAceInx,strCard)
intAceInx = intAceInx + 1
wEnd
If bMoved then
gintSrcStack = intStack
MoveCard intAceInx -1
End If
'Turn off the moving of a card.
gintMoveCardInx = -1
End Sub 'DoDblClick
'**********************************************
'* Name: ShuffleClicked
'**********************************************
'* Description:
'* When the Shuffle Stack is clicked we
'* must either put some cards on the
'* Discard Stack, or if the Shuffle Stack is empty
'* move all the cards from the Discard Stack.
'**********************************************
'* Parameters:
'* intStack Should be the Shuffle Stack.
'**********************************************
Sub ShuffleClicked(intStack)
dim strCard
dim inx
'Do we actually have cards to move?
If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
inx = 0
strCard = strPop(intStack)
'Move cards to Discard Stack until we are out of cards or
' hit the number we wanted to move.
while (gCOUNTDEAL > inx) and (gstrBOTTOMOFSTACK <> strCard)
Push gintDiscardStackInx, strCard
intCardInx = intGetCardIndex(strCard)
If -1 <> intCardInx then grbCardShowing(intCardInx) = True
inx = inx + 1
strCard = strPop(intStack)
Wend
If (gCOUNTDEAL = inx ) and (gstrBOTTOMOFSTACK <> strCard) then Push intStack,strCard
gintCountDiscarded = inx
Else
'No more to move so let's move discard back to shuffle.
for inx = 1 to intCountOnStack(gintDiscardStackInx)
strCard = strPop(gintDiscardStackInx)
Push intStack,strCard
intCardInx = intGetCardIndex(strCard)
grbCardShowing(intCardInx) = False
next
DrawStack intStack
gintCountDiscarded = 0
End If
DrawStack gintDiscardStackInx
End Sub 'ShuffleClicked
'**********************************************
'* Name: intCountOnStack
'**********************************************
'* Description:
'* Returns number of elements on stack given.
'**********************************************
'* Parameters:
'* intStack Stack to get number from.
'**********************************************
Function intCountonStack(intStack)
intCountOnStack = grobjAllCardStacks(intStack,2)
End Function
'**********************************************
'* Name: SetMoveStartValues
'**********************************************
'* Description:
'* This is the first function called in the
'* action of moving a card. This is where
'* the MouseDown events call to so stated
'* variables can be initialized.
'* Also the top and left start positions
'* are set up here for the card drag.
'*
'**********************************************
'* Parameters:
'* intStack Stack moving from
'* x Start left mouse position
'* y Start top mouse position
'**********************************************
Sub SetMoveStartValues (intStack,x,y)
dim intCount
CardMoving = strTopOfStack(intStack)
If gstrBOTTOMOFSTACK <> CardMoving then
intCardInx = intGetCardIndex(CardMoving)
If not grbCardShowing(intCardInx) then
'Card was on the stack but not visible, so
' make it visible and exit the move.
gintMoveCardInx = -1
grbCardShowing(intCardInx) = True
DrawCard intCardInx
exit Sub
End If
Else
gintMoveCardInx = -1
Exit Sub
End If
'If this isn't from an Ace Stack. then we must calculate
' which card it is on that stack,
If (gintAceStackStartInx > intStack) then
intCount = intCountOnStack(intStack)
'Calculate card position using default offset amount.
' No need to check horizontal offset because we wouldn't
' get this event unless we were already in the stack.
ClickedCard = (Y \ intGetVertOffset(intStack)) + 1
If ClickedCard > intCount then
ClickedCard = intCount
End If
'Number of cards we are moving.
gintCountMoving = (intCount - ClickedCard) + 1
CardMoving = strGetStackElement(intStack,ClickedCard)
Else
'Can only move the top element on an Ace Stack.
CardMoving = strTopOfStack(intStack)
If (gstrBOTTOMOFSTACK = CardMoving) then
gintMoveCardInx = -1
exit Sub
End If
gintCountMoving = 1
End If
gintMoveCardInx = intGetCardIndex(CardMoving)
If not grbCardShowing(gintMoveCardInx) then
gintMoveCardInx = -1
exit Sub
End If
'Save the stack it came from.
gintSrcStack = intStack
'Save starting values for the card to be used in
' DragCard.
gdCardTop = grobjAllCards(gintMoveCardInx).top
gdCardLeft = grobjAllCards(gintMoveCardInx).left
intStackSize = intCountOnStack(intStack)
for inx = (intStackSize - gintCountMoving)+ 1 to intStackSize
'Move the card to top of z order
intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
grobjAllCards(intCardInx).ZOrder(0)
next
gdOffsetTop = intGetVertOffset(intStack) * intCountOnStack(intStack)
gdStartTop = y
gdStartLeft = x
End Sub 'SetMoveStartValues
'**********************************************
'* Name: DragCard
'**********************************************
'* Description:
'* This is where a card is dragged. Drag stops
'* when a MouseUp event is fired.
'**********************************************
'* Parameters:
'* intStack Stack moving from
'* x Start left mouse position.
'* y Start top mouse position.
'**********************************************
Sub DragCard (intStack,x,y)
'Move Top of intStack
dim cntCard
If gintMoveCardInx = -1 then Exit Sub
'DragSkip is used to ignore a number of
' MouseMove events. This is done so
' we won't be overdrawing the card
' when a draw really isn't necessary.
' It will also make the drag appear to be
' more responsive
gintDragSkip = gintDragSkip - 1
If gintDragSkip <> 0 then exit Sub
gintDragSkip = 3
intStackSize = intCountOnStack(intStack)
cntCard = 0
'Figure out new top and left.
MyTop = grobjAllCards(gintMoveCardInx).top
MyLeft = grobjAllCards(gintMoveCardInx).left
for inx = (intStackSize - gintCountMoving) + 1 to intStackSize
intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
'Apply new values to cards below current one, being sure to maintain offset.
grobjAllCards(intCardInx).top = MyTop + (y - gdStartTop) + (cntCard * intGetVertOffset(intStack))
grobjAllCards(intCardInx).left = MyLeft + (x - gdStartLeft)
cntCard = cntCard + 1
next
gdStartTop = y
gdStartLeft = x
End Sub 'DragCard
'**********************************************
'* Name: SetMouseUp
'**********************************************
'* Description:
'* Tells the move operation that MouseUp has
'* happened. Will take care of seeing if
'* card was dropped in a movable place and
'* if so, moves the card. If not in a valid
'* place then the card is returned to the start
'* stack.
'**********************************************
'* Parameters:
'* intStack Stack moving from.
'* x Start left mouse position.
'* y Start top mouse position.
'**********************************************
Sub SetMouseUp (intStack, x,y)
If gintMoveCardInx = -1 then exit Sub
'Calculate the screen coordinates based on the x and y.
ScrnX = X + grobjAllCardStacks(intStack,1).left
ScrnY = Y + grobjAllCardStacks(intStack,1).top
inxStack = 1
bHit = False
while (inxStack <= gintCountAllStacks) and Not bHit
set pCurStack = grobjAllCardStacks(inxStack,1)
'Hit testing to see if we dropped it on a stack.
If ScrnX >= pCurStack.left and ScrnX <= (pCurStack.Left + pCurStack.Width) then
If ScrnY >= pCurStack.Top and ScrnY <= (pCurStack.Top + pCurStack.Height) then
bHit = True
End If
End If
inxStack = inxStack + 1
wEnd
If inxStack > gintCountAllStacks then
'Move it Back.
MoveCard gintSrcStack
Else
'Move it for real.
MoveCard inxStack-1
End If
End Sub 'SetMouseUp
'**********************************************
'* Name: bIsLegalMove
'**********************************************
'* Description:
'* Returns:
'* True Move from Src to Dest is valid.
'* False Not valid to move from Src to Dest.
'*
'* Move is valid to a card stack when:
'* Card moving is one less and different color.
'* Move is valid to an Ace Stack when:
'* Card moving is one greater and same suit.
'* Moves are valid between card stacks and
'* from ace and Discard Stack to card stack.
'*
'* Not valid:
'* Ace or Card stack to Discard Stack
'* if card not face up.
'**********************************************
'* Parameters:
'* intSrcStack Stack coming from.
'* intDestStack Stack going to.
'* strCard Card being moved.
'**********************************************
Function bIsLegalMove(intSrcStack,intDestStack, strCard)
dim intCard
dim intCardInx
bIsLegalMove = False
'Can put a card anywhere we want in debug mode.
If gbDebug then
bIsLegalMove = gbDebug
exit Function
End If
if gintCountMoving > 1 and (intDestStack >= gintAceStackStartInx and intDestStack <= (gintAceStackStartInx + 3)) then
exit function
end if
intCardInx = intGetCardIndex(strCard)
If -1 = intCardInx then exit Function
'Not valid, not visible.
If not grbCardShowing(intCardInx) then Exit Function
'Nothing moves to the Discard Stack (Not Valid).
If gintDiscardStackInx = intDestStack then exit Function
'Get card on top of destination for testing.
DestCard = strTopOfStack(intDestStack)
intCard = intCardVal(strCard)
If gintAceStackStartInx <= intDestStack then
'Move to Ace intStack?
If (gstrBOTTOMOFSTACK = DestCard) then
'Can move to empty Ace Stack if card is an Ace.
bIsLegalMove = (gACE = intCard)
Else
bIsLegalMove = (bSameSuit (strCard,DestCard) and (intCard - 1 = intCardVal(DestCard)))
End If
Else 'Move to CardStack
If (gstrBOTTOMOFSTACK = DestCard) then
'Can move to empty card stack if card is a King.
bIsLegalMove = (gKING = intCard)
Else
bIsLegalMove = ((Not bSameColor(strCard,DestCard)) and (intCard + 1 = intCardVal(DestCard)))
End If
End If
End Function
'**********************************************
'* Name: tmNewCard_Timer
'**********************************************
'* Description:
'* Here is where a new card is assigned to
'* the animation routine when the last one
'* has finished moving to the Ace Stack.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub tmNewCard_Timer()
If gbCardMoveDone then
'Turn off all timers until we get a new card assigned.
tmNewCard.enabled = false
gbCardMoveDone = false
'Our Start Case.
If gintCurStackToMove = 0 then
gintCurStackToMove = gintAceStackStartInx
Else
gobjCurMoveCard.left = grobjAllCardStacks(gintCurStackToMove,1).left
gobjCurMoveCard.top = grobjAllCardStacks(gintCurStackToMove,1).top
End If
'See if cards are already on the Ace Stack.
strCard = strTopOfStack(gintCurStackToMove)
intCard = intCardVal(strCard)
If -1 = intCard then
intCard = gACE
Else
'Already have cards on the stack, let's pile the rest on.
If 13 = intCard then gintCurStackToMove = gintCurStackToMove + 1
intCard = intCard + 1
While (intCard = 14) and (gintCurStackToMove <> gintAceStackStartInx + 4)
strCard = strTopOfStack(gintCurStackToMove)
If gstrBOTTOMOFSTACK = strCard then
intCard = gACE
Else
intCard = intCardVal(strCard)
End If
Wend
End If
'We are done moving. Call end-game animation to bounce cards away
If (gintCurStackToMove = gintAceStackStartInx + 4) then
SeeIfGameOver gintAceStackStartInx
exit Sub
End If
'Current suit that is moving.
CurMoveSuit = mid(gstrSuitOrder,((gintCurStackToMove - gintAceStackStartInx) + 1),1)
'Move the card to the destination.
strCard = intCard & CurMoveSuit
push gintCurStackToMove,strCard
'Get next card.
intCardInx = intGetCardIndex(strCard)
set gobjCurMoveCard = grobjAllCards(intCardInx)
grbCardShowing(intCardInx) = True
gobjCurMoveCard.ZOrder(0)
DrawCard intCardInx
'Figure out increments for moving it.
gincCardMoveSteps = 5
gincEndLeft = ((gobjCurMoveCard.left - grobjAllCardStacks(gintCurStackToMove,1).Left) \ gincCardMoveSteps)
gincEndTop = ((gobjCurMoveCard.Top - grobjAllCardStacks(gintCurStackToMove,1).Top) \ gincCardMoveSteps)
'Start the moving of the new card.
tmEndCardMove.enabled = true
End If
End Sub 'tmNewCard_Timer
'**********************************************
'* Name: tmEndCardMove_Timer
'**********************************************
'* Description:
'* Here is where the actual moving of a
'* card to its Ace Stack happens after the
'* user clicks End_The_Game.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub tmEndCardMove_Timer()
If (gincCardMoveSteps = 0) then
'If card has completed moving, get a new one.
gbCardMoveDone = true
tmEndCardMove.enabled = false
tmNewCard.enabled = true
exit Sub
End If
'Not done yet, move it another increment.
gincCardMoveSteps = gincCardMoveSteps - 1
gobjCurMoveCard.left = gobjCurMoveCard.left - gincEndLeft
gobjCurMoveCard.top = gobjCurMoveCard.top - gincEndTop
End Sub 'tmEndCardMove_Timer
'**********************************************
'* Name: EndTheGame
'**********************************************
'* Description:
'* When a user clicks End the Game, this is where
'* the whole process of moving
'* those cards is started.
'**********************************************
'* Parameters:
'* None
'**********************************************
Sub EndTheGame()
'Remove ALL cards from the card stacks.
for inx = 1 to gintCountCardStacks
strCard = strPop(inx)
while (strCard <> gstrBOTTOMOFSTACK)
strCard = strPop(inx)
Wend
next
gstrSuitOrder = ""
'Figure out the order the suits are placed on the Ace Stack.
' gstrSuitOrder holds the order.
for inx = gintAceStackStartInx to gintAceStackStartInx + 3
strCard = strTopOfStack(inx)
If strCard <> gstrBOTTOMOFSTACK then
gstrSuitOrder = gstrSuitOrder & strGetCardSuit(strCard)
Else
gstrSuitOrder = gstrSuitOrder & " "
End If
next
curSuit = "C"
'Default order is CSHD if no cards are have been played on an Ace Stack.
' If cards are already displayed then figure out which ones we are missing
' and add them to the spaces in the string.
for inx = 1 to 4
If instr(gstrSuitOrder,curSuit) = 0 then
blank = instr(gstrSuitOrder," ")
gstrSuitOrder = left(gstrSuitOrder,blank - 1) & curSuit & mid(gstrSuitOrder,blank+1)
End If
Select Case curSuit
Case "C"
curSuit = "S"
Case "S"
curSuit = "H"
case "H"
curSuit = "D"
End select
next
gintCurStackToMove = 0
gbCardMoveDone = true
'Set up and start the timers to move the first
' card.
tmNewCard.Interval = 1
tmNewCard.Enabled = true
tmEndCardMove.interval = 1
End Sub 'EndTheGame
'**********************************************
'* Name: SeeIfGameOver
'**********************************************
'* Description:
'* This is the place to see if all
'* the Kings are placed on their proper
'* Ace Stack and, if so, start the animation.
'**********************************************
'* Parameters:
'* intStack Stack to test.
'**********************************************
Sub SeeIfGameOver(intStack)
If (gintAceStackStartInx > intStack) or (gintAceStackStartInx+4 < intStack) then
exit Sub
End If
bWon = true
inx = gintAceStackStartInx
'Go until we don't see a king or we tested the last
' Ace Stack.
while bWon and inx < gintAceStackStartInx + 4
strCard = strTopOfStack(inx)
If (gstrBOTTOMOFSTACK <> strCard) then
bWon = (gKING = intCardVal(strCard))
Else
bWon = False
End If
inx = inx + 1
wEnd
If not bWon then exit Sub
'We WON!! Let's initialize for animation.
gCardCount = 52
tmEndAnimation.interval = 4
gbAnimationDone = false
'Moving all four cards.
for inx = 0 to 3
gbDoneMoving(inx) = true
next
Randomize
gbLeaveEarly = False
tmEndAnimation.enabled = true
End Sub 'SeeIfGameOver
'**********************************************
'* Name: tmEndAnimation_Timer
'**********************************************
'* Description:
'* Here is where all of the work for the
'* bouncing cards animation takes place.
'**********************************************
'* Parameters:
'**********************************************
Sub tmEndAnimation_Timer()
dim objCard
' inc-/decrement position
If gbAnimationDone or gbLeaveEarly then
'User wanted to exit early or animation finished.
tmEndAnimation.enabled = false
gbAnimationDone = True
msgbox "You Won !!!"
ClearAllCards
exit Sub
End If
gbAnimationDone = true
for inx = 0 to 3
'See if one of the 4 cards is done so we can assign another one.
If gbDoneMoving(inx) then
'Get next card.
strCard = strPop(inx + gintAceStackStartInx)
If (gstrBOTTOMOFSTACK <> strCard) then
intCardInx = intGetCardIndex(strCard)
set grCardBouncing(inx,1) = grobjAllCards(intCardInx)
'The following random is subtracted by half the range so
' both positive and negative directions can be generated.
grCardBouncing(inx,2) = (rnd() * 10) - 5 'Vertical
grCardBouncing(inx,3) = (rnd() * 30) - 15 'Horizontal
gbDoneMoving(inx) = false
Else
'Hit bottom of stack, no more bouncing.
grCardBouncing(inx,1) = 0
End If
End If
'Figure out effect of gravity.
grCardBouncing(inx,2) = grCardBouncing(inx,2) + (gdGravity * (tmEndAnimation.interval/100))
If not gbDoneMoving(inx) then
set objCard = grCardBouncing(inx,1)
'Get new position.
objCard.left = objCard.left + grCardBouncing(inx,3)
objCard.top = objCard.top + grCardBouncing(inx,2)
'check for border bounce,
gbDoneMoving(inx) = (objCard.left >= Form.Width) or (objCard.left + objCard.Width <= 0)
gbDoneMoving(inx) = gbDoneMoving(inx) or (objCard.top > Form.height) or ((objCard.top + objCard.height) < 0)
'Here's the friction and direction change if necessary.
If (grCardBouncing(inx,1).top <= 0) then
grCardBouncing(inx,2) = -1 * (grCardBouncing(inx,2) + gdFriction)
elseif (objCard.top + objCard.height) >= Form.Height then
grCardBouncing(inx,2) = (gdFriction - (grCardBouncing(inx,2)))
End If
End If
gbAnimationDone = (gbAnimationDone and gbDoneMoving(inx) and (gstrBOTTOMOFSTACK = strTopOfStack(inx + gintAceStackStartInx)))
next
End Sub 'tmEndAnimation_timer
'**********************************************
'* Name: MoveCard
'**********************************************
'* Description:
'* This is where a card move actually is
'* done. For the source stack, it relies
'* on gintSrcStack.
'**********************************************
'* Parameters:
'* intDestStack Destination stack
'**********************************************
Sub MoveCard (intDestStack)
'See If Card hit a different intStack.
'If not, hit other intStack or legal drop, then move back to original intStack.
intStackSize = intCountOnStack(gintSrcStack)
intTopOfMove = (intStackSize - gintCountMoving)+ 1
'Move from Src to Dest.
If (gintSrcStack <> intDestStack) then
strCard = strGetStackElement(gintSrcStack,intTopOfMove)
'See if it is legal to do this move.
If bIsLegalMove(gintSrcStack,intDestStack,strCard) then
for inx = (intStackSize - gintCountMoving)+ 1 to intStackSize
'Yes, let's move all the cards to the new stack.
strCard = strGetStackElement(gintSrcStack,inx)
Push intDestStack,strCard
next
'However many moved must be removed from the source.
for inx = 1 to gintCountMoving
strCard = strPop(gintSrcStack)
next
grobjAllCardStacks(intDestStack,1).Zorder(0)
DrawStack intDestStack
'After that move, let's see if it is the last.
SeeIfGameOver intDestStack
exit Sub
End If
End If
cntCard = 0
'Source and destination were the same, let's move cards back.
for inx = intTopOfMove to intStackSize
intCardInx = intGetCardIndex(strGetStackElement(gintSrcStack,inx))
grobjAllCards(intCardInx).top = gdCardTop + (cntCard * intGetVertOffset(intStack))
grobjAllCards(intCardInx).left = gdCardLeft
cntCard = cntCard + 1
next
grobjAllCardStacks(gintSrcStack,1).Zorder(0)
End Sub 'MoveCard
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'**********************************************
'* Name: Discard Stack Mouse events
'**********************************************
'* Description:
'* These events will handle the moving
'* of cards from the Discard Stack to either
'* the Ace Stack or a card stack.
'**********************************************
Sub Discard_DblClick(Cancel)
DoDblClick gintDiscardStackInx
End Sub
Sub Discard_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues gintDiscardStackInx,x,y
End Sub
Sub Discard_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard gintDiscardStackInx,x,y
End Sub
Sub Discard_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp gintDiscardStackInx,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'**********************************************
'* Name: Shuffle Stack Mouse events
'**********************************************
'* Description:
'* These events will handle the moving
'* of cards from the Shuffle Stack to the
'* Discard Stack..
'**********************************************
Sub Shuffle_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
ShuffleClicked(gintShuffleStackInx)
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'**********************************************
'* Name: Ace Stack mouse events
'**********************************************
'* Description:
'* These mouse events for all the Ace Stacks
'* will handle moving cards from an ace
'* stack back to a card stack ONLY.
'**********************************************
Sub Ace1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues gintCountCardStacks + 1,x,y
End Sub
Sub Ace1_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard gintCountCardStacks + 1,x,y
End Sub
Sub Ace1_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp gintCountCardStacks + 1,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Ace2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues gintCountCardStacks + 2,x,y
End Sub
Sub Ace2_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard gintCountCardStacks + 2,x,y
End Sub
Sub Ace2_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp gintCountCardStacks + 2,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Ace3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues gintCountCardStacks + 3,x,y
End Sub
Sub Ace3_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard gintCountCardStacks + 3,x,y
End Sub
Sub Ace3_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp gintCountCardStacks + 3,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Ace4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues gintCountCardStacks + 4,x,y
End Sub
Sub Ace4_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard gintCountCardStacks + 4,x,y
End Sub
Sub Ace4_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp gintCountCardStacks + 4,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'**********************************************
'* Name: Card stack mouse events
'**********************************************
'* Description:
'* These events will handle the moving
'* of cards from one stack to another, from
'* the Discard Stack to the card stacks or from
'* an Ace Stack to a card stack.
'**********************************************
Sub Stack7_DblClick(Cancel)
DoDblClick 7
End Sub
Sub Stack7_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues 7,x,y
End Sub
Sub Stack7_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard 7,x,y
End Sub
Sub Stack7_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp 7,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Stack6_DblClick(Cancel)
DoDblClick 6
End Sub
Sub Stack6_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues 6,x,y
End Sub
Sub Stack6_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard 6,x,y
End Sub
Sub Stack6_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp 6,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Stack5_DblClick(Cancel)
DoDblClick 5
End Sub
Sub Stack5_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp 5,x,y
End Sub
Sub Stack5_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues 5,x,y
End Sub
Sub Stack5_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard 5,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Stack4_DblClick(Cancel)
DoDblClick 4
End Sub
Sub Stack4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues 4,x,y
End Sub
Sub Stack4_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard 4,x,y
End Sub
Sub Stack4_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp 4,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Stack3_DblClick(Cancel)
DoDblClick 3
End Sub
Sub Stack3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues 3,x,y
End Sub
Sub Stack3_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard 3,x,y
End Sub
Sub Stack3_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp 3,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Stack2_DblClick(Cancel)
DoDblClick 2
End Sub
Sub Stack2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues 2,x,y
End Sub
Sub Stack2_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard 2,x,y
End Sub
Sub Stack2_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp 2,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Stack1_DblClick(Cancel)
DoDblClick 1
End Sub
Sub Stack1_MouseUp(Button, Shift, X, Y)
gbMouseUp = True
SetMouseUp 1,x,y
End Sub
Sub Stack1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
If 1 <> Button then exit Sub
gbMouseUp = false
SetMoveStartValues 1,x,y
End Sub
Sub Stack1_MouseMove(Button, Shift, X, Y)
If (1 <> Button) or gbMouseUp then exit Sub
DragCard 1,x,y
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub chkDebug_Click()
lstDebugPrint.Visible = chkDebug.Value
gbDebug = chkDebug.value
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'**********************************************
'* Name: cmdEndGame_Click
'**********************************************
'* Description:
'* User clicks this button to end the game
'**********************************************
Sub cmdEndGame_Click()
If not gbEndGame then
EndTheGame
gbEndGame = True
End If
End Sub
'Check box for debug mode
Sub UpDebug_Click()
If not gbEndGame then
chkDebug.visible = not chkdebug.visible
End If
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'**********************************************
'* Name: cmdNewDeck_Click
'**********************************************
'* Description:
'* User clicks this button to pop up the
'* dialog that allows the user to
'* choose a different deck.
'**********************************************
sub cmdNewDeck_Click()
CardDeckClick(-gintCurDeck)
CardDeckOnOff(true)
end sub 'cmdNewDeck_Click
'**********************************************
'* Name: CardDeckOk_Click
'**********************************************
'* Description:
'* Routine called when user clicks the ok
'* button in the CardDeck dialog. The routine
'* will store the new deck choice and close
'* the dialog.
'**********************************************
sub CardDeckOk_Click()
ChangeTheDeck gintTempCurDeck
CardDeckOnOff(false)
end sub
'**********************************************
'* Name: CardDeckCancel_Click
'**********************************************
'* Description:
'* Called to close the card back dialog
'* and the NOT change the value of the
'* current deck
'**********************************************
sub CardDeckCancel_Click()
CardDeckOnOff(false)
end sub
'**********************************************
'* Name: CardDeckClick
'**********************************************
'* Description:
'* Moves the "selection" square in the Deck
'* back dialog to visually show the user
'* which card back is choosen
'**********************************************
'* Parameters:
'* intCardNum Deck that is choosen by the user
'**********************************************
sub CardDeckClick(intCardnum)
gintTempCurDeck = -intCardnum
CardDeckSelector.Left = grobjCardDeck(intCardnum).Left - 4
CardDeckSelector.Top = grobjCardDeck(intCardnum).Top - 4
end sub
sub CardDeck1_Click: CardDeckClick 1: end sub
sub CardDeck2_Click: CardDeckClick 2: end sub
sub CardDeck3_Click: CardDeckClick 3: end sub
sub CardDeck4_Click: CardDeckClick 4: end sub
sub CardDeck5_Click: CardDeckClick 5: end sub
sub CardDeck6_Click: CardDeckClick 6: end sub
sub CardDeck7_Click: CardDeckClick 7: end sub
sub CardDeck8_Click: CardDeckClick 8: end sub
sub CardDeck9_Click: CardDeckClick 9: end sub
sub CardDeck10_Click: CardDeckClick 10: end sub
sub CardDeck11_Click: CardDeckClick 11: end sub
sub CardDeck12_Click: CardDeckClick 12: end sub
'**********************************************
'* Name: CardDeckOnOff
'**********************************************
'* Description:
'* Displays or hides the dialog with the
'* card backs depending on the parameter.
'**********************************************
'* Parameters:
'* bSwitch True = Show dialog
'* False = Hide dialog
'**********************************************
sub CardDeckOnOff(bSwitch)
if( bSwitch = true ) then
bSwitchz = 0
else
bSwitchz = 1
end if
CardDeckMouseBlock.Zorder(bSwitchz): CardDeckMouseBlock.Visible = bSwitch
CardDeckBack.Zorder(bSwitchz): CardDeckBack.Visible = bSwitch
CardDeckSelector.Zorder(bSwitchz): CardDeckSelector.Visible = bSwitch
for t = 1 to 12
grobjCardDeck(t).Zorder(bSwitchz): grobjCardDeck(t).Visible = bSwitch
next
CardDeckOk.Zorder(bSwitchz): CardDeckOk.Visible = bSwitch
CardDeckCancel.Zorder(bSwitchz): CardDeckCancel.Visible = bSwitch
end sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'New deal.
Sub cmdNewDeal_Click()
StartGame
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'Click on the background when the end animation is running
' to stop the animation and bring up the You Won dialog.
Sub EndGameClick_MouseDown(Button, Shift, X, Y)
If gbEndGame then
gbLeaveEarly = true
End If
End Sub
-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
<!--
'Changes the number of cards that are dealt from
' the Shuffle Stack to the Discard Stack
Sub cmdChangeDeal_Click()
if( gCOUNTDEAL = 1 ) then
gCOUNTDEAL = 3
cmdChangeDeal.Caption = "Change to Deal 1"
else
gCOUNTDEAL = 1
cmdChangeDeal.Caption = "Change to Deal 3"
end if
end sub
-->
</SCRIPT>
<DIV BACKGROUND="#8000" ID="Form" STYLE="LAYOUT:FIXED;WIDTH:651pt;HEIGHT:444pt;">
<OBJECT ID="CardDeckMouseBlock"
CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:-1pt;LEFT:-2pt;WIDTH:590pt;HEIGHT:362pt;DISPLAY:NONE;ZINDEX:0;">
<PARAM NAME="BackColor" VALUE="32768">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="20814;12771">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="CardDeckBack"
CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:83pt;LEFT:74pt;WIDTH:420pt;HEIGHT:223pt;TABINDEX:2;DISPLAY:NONE;ZINDEX:1;">
<PARAM NAME="VariousPropertyBits" VALUE="25">
<PARAM NAME="Size" VALUE="14817;7867">
<PARAM NAME="FontEffects" VALUE="1073750016">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="ParagraphAlign" VALUE="3">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="EndGameClick"
CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:0pt;LEFT:0pt;WIDTH:644pt;HEIGHT:440pt;ZINDEX:2;">
<PARAM NAME="BackColor" VALUE="32768">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="22719;15522">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
</OBJECT>
<OBJECT ID="CardDeckSelector"
CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:87pt;LEFT:86pt;WIDTH:65pt;HEIGHT:82pt;DISPLAY:NONE;ZINDEX:3;">
<PARAM NAME="ForeColor" VALUE="0">
<PARAM NAME="BackColor" VALUE="0">
<PARAM NAME="Size" VALUE="2293;2893">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="tmEndAnimation"
CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2"
CODEBASE="ietimer.ocx"
STYLE="TOP:454pt;LEFT:8pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:0;ZINDEX:4;">
<PARAM NAME="_ExtentX" VALUE="873">
<PARAM NAME="_ExtentY" VALUE="609">
</OBJECT>
<OBJECT ID="Card1H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:0pt;LEFT:149pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:1;ZINDEX:5;"
CODEBASE="card.ocx">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Ace3"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:437pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:6;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="AceImage3"
CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:437pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:7;">
<PARAM NAME="PicturePath" VALUE="acestack.jpg">
<PARAM NAME="BackColor" VALUE="32768">
<PARAM NAME="BorderStyle" VALUE="0">
<PARAM NAME="Size" VALUE="1905;2540">
<PARAM NAME="VariousPropertyBits" VALUE="19">
</OBJECT>
<OBJECT ID="Ace1"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:8;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="AceImage1"
CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:9;">
<PARAM NAME="PicturePath" VALUE="acestack.jpg">
<PARAM NAME="BackColor" VALUE="32768">
<PARAM NAME="BorderStyle" VALUE="0">
<PARAM NAME="Size" VALUE="1905;2540">
<PARAM NAME="VariousPropertyBits" VALUE="19">
</OBJECT>
<OBJECT ID="Ace2"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:371pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:10;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="AceImage2"
CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:371pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:11;">
<PARAM NAME="PicturePath" VALUE="acestack.jpg">
<PARAM NAME="BackColor" VALUE="32768">
<PARAM NAME="BorderStyle" VALUE="0">
<PARAM NAME="Size" VALUE="1905;2540">
<PARAM NAME="VariousPropertyBits" VALUE="19">
</OBJECT>
<OBJECT ID="Ace4"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:503pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:12;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="AceImage4"
CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:503pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:13;">
<PARAM NAME="PicturePath" VALUE="acestack.jpg">
<PARAM NAME="BackColor" VALUE="32768">
<PARAM NAME="BorderStyle" VALUE="0">
<PARAM NAME="Size" VALUE="1905;2540">
<PARAM NAME="VariousPropertyBits" VALUE="19">
</OBJECT>
<OBJECT ID="ShuffleImage"
CLASSID="CLSID:D4A97620-8E8F-11CF-93CD-00AA00C08FDF" STYLE="TOP:17pt;LEFT:25pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:14;">
<PARAM NAME="PicturePath" VALUE="shuffle.jpg">
<PARAM NAME="BorderStyle" VALUE="0">
<PARAM NAME="Size" VALUE="1905;2540">
<PARAM NAME="VariousPropertyBits" VALUE="19">
</OBJECT>
<OBJECT ID="Stack1"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:107pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:15;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="Stack2"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:173pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:16;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="Stack3"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:239pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:17;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="Stack4"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:18;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="Stack5"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:371pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:19;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="Stack6"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:437pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:20;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="Stack7"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:116pt;LEFT:503pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:21;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="Discard"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:99pt;WIDTH:74pt;HEIGHT:72pt;ZINDEX:22;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="2611;2540">
</OBJECT>
<OBJECT ID="Shuffle"
CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:17pt;LEFT:25pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:23;">
<PARAM NAME="VariousPropertyBits" VALUE="8388627">
<PARAM NAME="Size" VALUE="1905;2540">
</OBJECT>
<OBJECT ID="tmEndCardMove"
CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:454pt;LEFT:41pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:4;ZINDEX:24;">
<PARAM NAME="_ExtentX" VALUE="873">
<PARAM NAME="_ExtentY" VALUE="609">
</OBJECT>
<OBJECT ID="tmNewCard"
CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:454pt;LEFT:74pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:44;ZINDEX:25;">
<PARAM NAME="_ExtentX" VALUE="873">
<PARAM NAME="_ExtentY" VALUE="609">
</OBJECT>
<OBJECT ID="HiddenCardLabel"
CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:0pt;LEFT:512pt;WIDTH:107pt;HEIGHT:8pt;DISPLAY:NONE;ZINDEX:26;">
<PARAM NAME="BackColor" VALUE="32768">
<PARAM NAME="Caption" VALUE="All the cards are betwen this lable and the check box">
<PARAM NAME="Size" VALUE="3775;282">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="chkDebug"
CLASSID="CLSID:8BD21D40-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:0pt;LEFT:33pt;WIDTH:57pt;HEIGHT:12pt;TABINDEX:5;DISPLAY:NONE;ZINDEX:27;">
<PARAM NAME="BackColor" VALUE="2000000000">
<PARAM NAME="ForeColor" VALUE="100">
<PARAM NAME="DisplayStyle" VALUE="4">
<PARAM NAME="Size" VALUE="2011;423">
<PARAM NAME="Caption" VALUE="Debug">
<PARAM NAME="Accelerator" VALUE="68">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="cmdNewDeal"
CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:99pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:6;ZINDEX:28;">
<PARAM NAME="ForeColor" VALUE="0">
<PARAM NAME="BackColor" VALUE="16777215">
<PARAM NAME="Caption" VALUE="New Deal">
<PARAM NAME="Size" VALUE="2681;882">
<PARAM NAME="Accelerator" VALUE="78">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="ParagraphAlign" VALUE="3">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="cmdNewDeck"
CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:133pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:7;ZINDEX:29;">
<PARAM NAME="ForeColor" VALUE="0">
<PARAM NAME="BackColor" VALUE="16777215">
<PARAM NAME="Caption" VALUE="Select New Deck">
<PARAM NAME="Size" VALUE="2681;882">
<PARAM NAME="Accelerator" VALUE="83">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="ParagraphAlign" VALUE="3">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="cmdEndGame"
CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:166pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:10;ZINDEX:30;">
<PARAM NAME="ForeColor" VALUE="0">
<PARAM NAME="BackColor" VALUE="16777215">
<PARAM NAME="Caption" VALUE="End The Game">
<PARAM NAME="Size" VALUE="2681;882">
<PARAM NAME="Accelerator" VALUE="69">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="ParagraphAlign" VALUE="3">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="cmdChangeDeal"
CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:199pt;LEFT:4pt;WIDTH:76pt;HEIGHT:25pt;TABINDEX:36;ZINDEX:31;">
<PARAM NAME="ForeColor" VALUE="0">
<PARAM NAME="BackColor" VALUE="16777215">
<PARAM NAME="Caption" VALUE="Change to Draw 1">
<PARAM NAME="Size" VALUE="2681;882">
<PARAM NAME="Accelerator" VALUE="67">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="ParagraphAlign" VALUE="3">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="Card2H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:215pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:11;ZINDEX:32;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card3H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:272pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:12;ZINDEX:33;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card4H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:157pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:13;ZINDEX:34;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card5H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:223pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:14;ZINDEX:35;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card6H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:281pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:15;ZINDEX:36;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card7H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:165pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:16;ZINDEX:37;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card8H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:231pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:17;ZINDEX:38;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card9H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:18;ZINDEX:39;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card10H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:173pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:19;ZINDEX:40;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card11H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:239pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:20;ZINDEX:41;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card12H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:297pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:21;ZINDEX:42;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card13H"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:165pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:22;ZINDEX:43;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card1D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:231pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:23;ZINDEX:44;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card2D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:24;ZINDEX:45;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card3D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:173pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:25;ZINDEX:46;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card4D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:239pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:26;ZINDEX:47;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card5D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:297pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:27;ZINDEX:48;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card6D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:182pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:28;ZINDEX:49;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card7D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:248pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:29;ZINDEX:50;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card8D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:305pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:30;ZINDEX:51;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card9D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:190pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:31;ZINDEX:52;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card10D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:256pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:32;ZINDEX:53;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card11D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:33;ZINDEX:54;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card12D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:37;ZINDEX:55;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card13D"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:42;ZINDEX:56;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card1C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:46;ZINDEX:57;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card2C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:47;ZINDEX:58;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card3C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:50;ZINDEX:59;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card4C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:51;ZINDEX:60;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card5C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:55;ZINDEX:61;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card6C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:56;ZINDEX:62;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card7C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:59;ZINDEX:63;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card8C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:60;ZINDEX:64;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card9C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:66;ZINDEX:65;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card10C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:68;ZINDEX:66;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card11C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:76;ZINDEX:67;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card12C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:80;ZINDEX:68;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card13C"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:86;ZINDEX:69;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card1S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:88;ZINDEX:70;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card2S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:91;ZINDEX:71;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card3S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:92;ZINDEX:72;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card4S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:90;ZINDEX:73;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card5S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:82;ZINDEX:74;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card6S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:70;ZINDEX:75;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card7S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:61;ZINDEX:76;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card8S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:57;ZINDEX:77;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card9S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:52;ZINDEX:78;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card10S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:48;ZINDEX:79;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card11S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:43;ZINDEX:80;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card12S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:38;ZINDEX:81;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="Card13S"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:-41pt;LEFT:314pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:34;ZINDEX:82;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
</OBJECT>
<OBJECT ID="CardDeck1"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:91pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:63;DISPLAY:NONE;ZINDEX:83;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-1">
</OBJECT>
<OBJECT ID="CardDeck2"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:157pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:65;DISPLAY:NONE;ZINDEX:84;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-2">
</OBJECT>
<OBJECT ID="CardDeck3"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:223pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:67;DISPLAY:NONE;ZINDEX:85;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-3">
</OBJECT>
<OBJECT ID="CardDeck4"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:289pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:69;DISPLAY:NONE;ZINDEX:86;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-4">
</OBJECT>
<OBJECT ID="CardDeck5"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:355pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:71;DISPLAY:NONE;ZINDEX:87;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-5">
</OBJECT>
<OBJECT ID="CardDeck6"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:91pt;LEFT:421pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:73;DISPLAY:NONE;ZINDEX:88;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-6">
</OBJECT>
<OBJECT ID="CardDeck7"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:91pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:75;DISPLAY:NONE;ZINDEX:89;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-7">
</OBJECT>
<OBJECT ID="CardDeck8"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:157pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:77;DISPLAY:NONE;ZINDEX:90;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-8">
</OBJECT>
<OBJECT ID="CardDeck9"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:223pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:79;DISPLAY:NONE;ZINDEX:91;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-9">
</OBJECT>
<OBJECT ID="CardDeck10"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:289pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:81;DISPLAY:NONE;ZINDEX:92;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-10">
</OBJECT>
<OBJECT ID="CardDeck11"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:355pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:83;DISPLAY:NONE;ZINDEX:93;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-11">
</OBJECT>
<OBJECT ID="CardDeck12"
CLASSID="CLSID:5A73F48A-B702-11CF-8498-00AA00BBF311" STYLE="TOP:173pt;LEFT:421pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:85;DISPLAY:NONE;ZINDEX:94;">
<PARAM NAME="_ExtentX" VALUE="2037">
<PARAM NAME="_ExtentY" VALUE="2619">
<PARAM NAME="Suite" VALUE="-12">
</OBJECT>
<OBJECT ID="CardDeckOk"
CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:264pt;LEFT:182pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:87;DISPLAY:NONE;ZINDEX:95;">
<PARAM NAME="Caption" VALUE="Ok">
<PARAM NAME="Size" VALUE="3210;882">
<PARAM NAME="Accelerator" VALUE="79">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="ParagraphAlign" VALUE="3">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="CardDeckCancel"
CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:264pt;LEFT:297pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:89;DISPLAY:NONE;ZINDEX:96;">
<PARAM NAME="Caption" VALUE="Cancel">
<PARAM NAME="Size" VALUE="3210;882">
<PARAM NAME="Accelerator" VALUE="67">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="ParagraphAlign" VALUE="3">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
<OBJECT ID="lstDebugPrint"
CLASSID="CLSID:8BD21D20-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:8pt;LEFT:157pt;WIDTH:122pt;HEIGHT:66pt;TABINDEX:9;DISPLAY:NONE;ZINDEX:97;">
<PARAM NAME="BackColor" VALUE="16777215">
<PARAM NAME="ScrollBars" VALUE="3">
<PARAM NAME="DisplayStyle" VALUE="2">
<PARAM NAME="Size" VALUE="4304;2328">
<PARAM NAME="MatchEntry" VALUE="0">
<PARAM NAME="FontCharSet" VALUE="0">
<PARAM NAME="FontPitchAndFamily" VALUE="2">
<PARAM NAME="FontWeight" VALUE="0">
</OBJECT>
</DIV>